**「Windows PowerShell 基本操作」**一系列的文章分享已經結束了,從本次開始,要說明如何應用 Windows PowerShell 來進行相關的管理。這次就先介紹要怎麼收集電腦的資料。
為了方便讓系統管理者收集電腦的資料,Windows PowerShell 提供一組 cmdlet:Get-WmiObject,來取得 Windows Management Instrumentation(WMI)類別(英文稱 Class)的執行個體或是其相關可用類別的資料。因為 WMI 類別多達幾百個,而某些類別甚至包含數 10 多個屬性,因此 Get-WmiObject[/b] 提供一個可查詢有哪些可用的 WMI 類別清單。
以下面的程式碼而言,會需取得本機電腦上可用的 WMI 類別清單:
Get-WmiObject -List | Out-Host -Paging
以下先舉幾個例子:
桌面設定的資料
以下面的程式碼為例,會收集電腦名稱為 alexc-pc 的桌面設定資料:
Get-WmiObject -Class Win32_Desktop -ComputerName alexc-pc
執行的部分結果類似這樣:
大家可千萬不要被 ComputerName 參數的名子給騙了,這個參數的值不僅可以使用電腦名稱或完整網域名稱,也可使用 IP 位址。更可用句號(.)、localhost 以及 127.0.0.1 來代表是本機電腦,不過一般來說,在這種情況下,都會直接省略掉 ComputerName 參數跟參數值。原因先前提過:屬性是預設值,就可省略。
要注意的是,於使用 Get-WmiObject 連接遠端電腦時,遠端電腦必須已經備妥 WMI 環境,且可以不用安裝 Windows PowerShell,但您所使用的帳號必須隸屬於遠端電腦的本機系統管理員群組。
我們可以看到,執行的結果有很多資料,這時候就可使用管線運算子(|) 將 Get-WmiObject 執行的結果,傳送給 Select-Object 指令進行篩選,並以頁為輸出單位。例如只要列出以英文字母開頭的屬性,就可在 Property 參數之後值,使用 [a-z]* 來過濾:
Get-WmiObject -Class Win32_Desktop | Select-Object -Property [a-z]* | Out-Host -Paging
處理器資料
以下面的程式碼來說,會顯示本機電腦的處理器資料:
Get-WmiObject -Class Win32_Processor
電腦型號資料
通常我們會想知道目前所安裝的 OS 是 32-bit 還是 64-bit,雖然由上面的程式碼之執行結果中的 AddressWidth 跟 DataWidth,也可得知,不過,用下面的程式碼似乎更簡單:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property SystemType
X86-based PC
或
x64-based PC
事實上,Win32_ComputerSystem 裡面提供的資料很多:
Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property *
作業系統資料
列出基本的作業系統資料:
Get-WmiObject -Class Win32_OperatingSystem
更為詳細的作業系統資料:
Get-WmiObject -Class Win32_OperatingSystem | Select-Object -Property *
現在來一點實用的應用。在本機電腦上顯示以 Win 帶頭的服務:
PS C:\> Get-WmiObject -Query "Select * from Win32_Service Where Name Like 'Win%'"
ExitCode : 0
Name : WinDefend
ProcessId : 4196
StartMode : Auto
State : Running
Status : OK
ExitCode : 0
Name : WinHttpAutoProxySvc
ProcessId : 0
StartMode : Manual
State : Stopped
Status : OK
ExitCode : 0
Name : Winmgmt
ProcessId : 992
StartMode : Auto
State : Running
Status : OK
ExitCode : 0
Name : WinRM
ProcessId : 1108
StartMode : Manual
State : Running
Status : OK
現在要停止 WinRM 服務,先用 Get-WmiObject 命令搭配 Filter 參數找出服務名稱為 WinRM 的服務,然後再呼叫 Win32_Service WMI 類別的 StopService 方法(請確認權限足以停止服務!):
(Get-WmiObject Win32_Service -Filter "Name='WinRM'").StopService()
最後,列出其他幾個較為常用的 WMI 類別:
BIOS 資料:Win32_BIOS
已安裝的 Hotfix 資料:Win32_QuickFixEngineering
可用的磁碟空間:Win32_LogicalDisk
登入工作階段資料:Win32_LogonSession
已登入電腦的使用者資料:Win32_ComputerSystem
電腦當地時間:Win32_LocalTime
網路介面卡屬性:Win32_NetworkAdapter
網路介面卡設定:Win32_NetworkAdapterConfiguration